#include <vector>
#include <stdexcept>

using namespace std;

/* 列表类简易实现 */
class MyList {
private:
    int* nums;                // 数组（存储列表元素）
    int numsCapacity = 10;    // 列表容量
    int numsSize = 0;         // 列表长度（即当前元素数量）
    int extendRatio = 2;      // 每次列表扩容的倍数

public:
    /* 构造方法 */
    MyList() {
        nums = new int[numsCapacity];
    }

    /* 析构方法 */
    ~MyList() {
        delete[] nums;
    }

    /* 获取列表长度（即当前元素数量）*/
    int size() {
        return numsSize;
    }

    /* 获取列表容量 */
    int capacity() {
        return numsCapacity;
    }

    /* 访问元素 */
    int get(int index) {
        if (index < 0 || index >= size())
            throw out_of_range("索引越界");
        return nums[index];
    }

    /* 更新元素 */
    void set(int index, int num) {
        if (index < 0 || index >= size())
            throw out_of_range("索引越界");
        nums[index] = num;
    }

    /* 尾部添加元素 */
    void add(int num) {
        if (size() == capacity())
            extendCapacity();
        nums[size()] = num;
        numsSize++;
    }

    /* 中间插入元素 */
    void insert(int index, int num) {
        if (index < 0 || index >= size())
            throw out_of_range("索引越界");
        if (size() == capacity())
            extendCapacity();
        for (int j = size() - 1; j >= index; j--) {
            nums[j + 1] = nums[j];
        }
        nums[index] = num;
        numsSize++;
    }

    /* 删除元素 */
    int remove(int index) {
        if (index < 0 || index >= size())
            throw out_of_range("索引越界");
        int num = nums[index];
        for (int j = index; j < size() - 1; j++) {
            nums[j] = nums[j + 1];
        }
        numsSize--;
        return num;
    }

    /* 列表扩容 */
    void extendCapacity() {
        int newCapacity = capacity() * extendRatio;
        int* tmp = nums;
        nums = new int[newCapacity];
        for (int i = 0; i < size(); i++) {
            nums[i] = tmp[i];
        }
        delete[] tmp;
        numsCapacity = newCapacity;
    }

    /* 将列表转换为 Vector 用于打印 */
    vector<int> toVector() {
        vector<int> vec(size());
        for (int i = 0; i < size(); i++) {
            vec[i] = nums[i];
        }
        return vec;
    }
};
